<?php

require_once("Model/Database.php");
require_once("Helper/FormValidator.php");

class UserHandler {
		
		//Privata strängar
		private $db = NULL;
		private $table = "user";
        
		//Konstruktor för databasinstans
        public function __construct(Database $db) 
        {
                $this->db =$db;
        }

		//Validerar indata via "FormValidator"
		public function ValidateUserInfo($userName, $password, $repeatedPassword)
		{
			$fv = new FormValidator;
			
			$fv->ValidateUsername($userName);
			$fv->ValidatePassword($password);
			$ret = $fv->ValidateRepeatedPassword($password, $repeatedPassword);

			return $ret;
		}	
		
		//Anropar database klassen för skapande av ny användare
		public function AddUser($userName, $password) 
		{						
			$sql = "INSERT INTO $this->table (name, password) VALUES (?,?)";  
			
			$stmt = $this->db->Prepare($sql); 

			$stmt->bind_param("ss", $userName, $password);			      
			
			$exec = $this->db->Execute($stmt);
			
			return TRUE;
		}
		
		//Anropar databasklassen för borttagning av en användare
		//Retunerar TRUE vid lyckad exekvering
		public function DeleteUser($userName) 
		{
			$sql = "DELETE FROM $this->table WHERE name=?";  
			
			$stmt = $this->db->Prepare($sql); 

			$stmt->bind_param("s", $userName);			      
			
			$exec = $this->db->Execute($stmt);
			
			return TRUE;						
		}	
		
		//Anropar databasen för kontroll av existerande användare
		//Retunerar TRUE om anvädarnamnet redan existerar		
		public function UserDoesExist($username) 
		{
			$sql = "SELECT userId FROM $this->table WHERE name = ?";
			
			$stmt = $this->db->Prepare($sql); 
			
			$stmt->bind_param("s", $username);
			
			$ret = $this->db->SelectSingleValue($stmt); 
			
			if(is_numeric($ret))
			{
				return TRUE;		 	
			}	
			
			return FALSE;		
		}			
						
		//TESTFUNKTION
		public function Test() 
		{
			//VALIDERINGSTESTER
			
			//För kort lösenord
			$test = $this->ValidateUserInfo("adam", "1234", "1234");
			if(empty($test) == TRUE)
			{
				echo "Fel: ValidateUserInfo godkände ett för kort lösenord.";
				return FALSE;
			}	
			
			//Tomt användarnamn
			$test = $this->ValidateUserInfo("", "123456", "123456");
			if(empty($test) == TRUE)
			{
				echo "Fel: ValidateUserInfo godkände ett tomt anvdarnamn.";
				return FALSE;
			}	
			
			//Felaktiga tecken
			$test = $this->ValidateUserInfo("/&%&(%%&(%))", "123456", "123456");
			if(empty($test) == TRUE)
			{
				echo "Fel: ValidateUserInfo godkände felaktiga tecken för anvdarnamn.";
				return FALSE;
			}	
			
			//Användare finns redan
			if($this->UserDoesExist("adam") == FALSE)
			{
				echo "Fel: UserDoExist godkände ett användarnamn som redan finns.";
				return FALSE;
			}	
			
			//LÄGG TILL OCH TA BORT ANVÄNDARE		
			
			//Testar att lägga till en korekt användare
			if($this->AddUser("Test", "123456") != TRUE)
			{
				echo "Fel: AddUser kunde inte lägga till en korekt användare";
				return FALSE;				
			}	
			
			//Testar att ta bort den nyss tillagda användaren
			if($this->DeleteUser("Test") != TRUE)
			{
				echo "Fel: DeleteUser kunde inte ta bort en befintlig användare";
				return FALSE;				
			}										
			
			return TRUE;				
		}				
			
}

?>